home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / smb_hotfixes.nasl < prev    next >
Text File  |  2005-01-14  |  7KB  |  220 lines

  1. #
  2. # (C) Tenable Network Security
  3. #
  4.  
  5. if(description)
  6. {
  7.  script_id(13855);
  8.  script_version("$Revision: 1.5 $");
  9.  
  10.  name["english"] = "Installed Windows Hotfixes";
  11.  
  12.  script_name(english:name["english"]);
  13.  
  14.  desc["english"] = "
  15. This script enumerates the list of installed hotfixes on the remote host
  16. and store them in the knowledge base for the other SMB scripts to use, to
  17. avoid useless connections to the remote registry.
  18.  
  19. This script required credentials to log into the remote host.";
  20.  
  21.  
  22.  script_description(english:desc["english"]);
  23.  
  24.  summary["english"] = "Fills the KB with the list of installed hotfixes";
  25.  
  26.  script_summary(english:summary["english"]);
  27.  
  28.  script_category(ACT_GATHER_INFO);
  29.  
  30.  script_copyright(english:"This script is Copyright (C) 2004 Tenable Network Security");
  31.  family["english"] = "Windows";
  32.  script_family(english:family["english"]);
  33.  
  34.  script_dependencies("netbios_name_get.nasl", "smb_login.nasl","smb_registry_full_access.nasl", "smb_reg_service_pack.nasl","smb_reg_service_pack_W2K.nasl", "smb_reg_service_pack_XP.nasl");
  35.  if ( defined_func("bn_random") ) script_dependencies("ssh_get_info.nasl");
  36.  script_require_keys("SMB/name", "SMB/login", "SMB/password",  "SMB/registry_access");
  37.  
  38.  script_require_ports(139, 445);
  39.  exit(0);
  40. }
  41.  
  42. if ( get_kb_item("SMB/samba") ) exit(0);
  43. if ( get_kb_item("SMB/Registry/Enumerated") ) exit(0);
  44. include("smb_nt.inc");
  45.  
  46. global_var handle;
  47.  
  48. function crawl(key, level, maxlevel)
  49. {
  50.  local_var mylist, entries, l, list;
  51.  list = make_list();
  52.  entries = make_list();
  53.  
  54.  if ( level >= maxlevel ) return make_list();
  55.  
  56.  key_h = registry_get_key(soc:soc, uid:uid, tid:tid, pipe:pipe, key:key, reply:handle);
  57.  if(key_h)
  58.  {
  59.   entries = registry_enum_key(soc:soc, uid:uid, tid:tid, pipe:pipe, reply:key_h);
  60.   registry_close(soc:soc, uid:uid, tid:tid, pipe:pipe, reply:key_h);
  61.  }
  62.  
  63.  foreach l (entries)
  64.   {
  65.   list = make_list(list, key + "\" + l );
  66.   }
  67.  
  68.  
  69.  entries = make_list();
  70.  foreach l (list)
  71.  {
  72.   entries = make_list(entries, crawl(key:l, level:level + 1, maxlevel:maxlevel));
  73.  }
  74.  
  75.  return make_list(list, entries);
  76. }
  77.  
  78.  
  79. x_name = kb_smb_name();
  80. if(!x_name)exit(0);
  81.  
  82. _smb_port = kb_smb_transport();
  83. if(!_smb_port)exit(0);
  84.  
  85. if(!get_port_state(_smb_port)) exit(0);
  86. login = kb_smb_login();
  87. pass  = kb_smb_password();
  88. domain = kb_smb_domain();
  89.  
  90. if(!login)login = "";
  91. if(!pass) pass = "";
  92.  
  93.       
  94. soc = open_sock_tcp(_smb_port);
  95. if(!soc) exit(0);
  96.  
  97. #
  98. # Request the session
  99. r = smb_session_request(soc:soc,  remote:x_name);
  100. if(!r) { close(soc); exit(0); }
  101.  
  102. #
  103. # Negociate the protocol
  104. #
  105. prot = smb_neg_prot(soc:soc);
  106. if(!prot){ close(soc); exit(0); }
  107.  
  108.  
  109. r = smb_session_setup(soc:soc, login:login, password:pass, domain:domain, prot:prot);
  110. if(!r){ close(soc); exit(0); }
  111. uid = session_extract_uid(reply:r);
  112.  
  113. r = smb_tconx(soc:soc, name:x_name, uid:uid, share:"IPC$");
  114. tid = tconx_extract_tid(reply:r);
  115. if(!tid){ close(soc); exit(0); }
  116.  
  117.  
  118. r = smbntcreatex(soc:soc, uid:uid, tid:tid, name:"\winreg");
  119. if(!r){ close(soc); exit(0);}
  120. pipe = smbntcreatex_extract_pipe(reply:r);
  121.  
  122. r = pipe_accessible_registry(soc:soc, uid:uid, tid:tid, pipe:pipe);
  123. if(!r){ close(soc); exit(0); }
  124. handle = registry_open_hklm(soc:soc, uid:uid, tid:tid, pipe:pipe);
  125.  
  126.  
  127. location1 = "SOFTWARE\Microsoft\Updates";
  128. location2 = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix";
  129.  
  130. list = make_list(crawl(key:location1, level:0, maxlevel:3), 
  131.              crawl(key:location2, level:0, maxlevel:1));
  132.          
  133. if ( max_index(list) > 0 )
  134. {
  135.   set_kb_item(name:"SMB/Registry/Enumerated", value:TRUE);
  136. }
  137. foreach l ( list ) 
  138. {
  139.  l = str_replace(find:"\", replace:"/", string:l);
  140.  name = "SMB/Registry/HKLM/" + l;
  141.  # Maybe we want to improve that in Nessus 2.1.x by storing everything as a huge string...
  142.  set_kb_item(name:name, value:TRUE);
  143. }
  144.  
  145.  
  146.  
  147. #
  148. # Check for common registry values other plugins are likely to look at
  149. key = "SYSTEM\CurrentControlSet\Control\ProductOptions";
  150. item = "ProductType";
  151.  
  152. key_h = registry_get_key(soc:soc, uid:uid, tid:tid, pipe:pipe, key:key, reply:handle);
  153. if ( key_h )
  154. {
  155.  data = registry_get_item_sz(soc:soc, uid:uid, tid:tid, pipe:pipe, item:item, reply:key_h);
  156.  value = registry_decode_sz(data:data);
  157.  registry_close(soc:soc, uid:uid, tid:tid, pipe:pipe, reply:key_h);
  158.  if ( value ) set_kb_item(name:"SMB/Registry/HKLM/SYSTEM/CurrentControlSet/Control/ProductOptions", value:value);
  159. }
  160.  
  161.  
  162. key = "SYSTEM\CurrentControlSet\Services\W3SVC";
  163. item = "ImagePath";
  164.  
  165. key_h = registry_get_key(soc:soc, uid:uid, tid:tid, pipe:pipe, key:key, reply:handle);
  166. if ( key_h )
  167. {
  168.  data = registry_get_item_sz(soc:soc, uid:uid, tid:tid, pipe:pipe, item:item, reply:key_h);
  169.  value = registry_decode_sz(data:data);
  170.  registry_close(soc:soc, uid:uid, tid:tid, pipe:pipe,  reply:key_h);
  171.  if ( value ) set_kb_item(name:"SMB/Registry/HKLM/SYSTEM/CurrentControlSet/Services/W3SVC/ImagePath", value:value);
  172. }
  173.  
  174. key = "SOFTWARE\Microsoft\DataAccess";
  175. item = "Version";
  176.  
  177. key_h = registry_get_key(soc:soc, uid:uid, tid:tid, pipe:pipe, key:key, reply:handle);
  178. if ( key_h )
  179. {
  180.  data = registry_get_item_sz(soc:soc, uid:uid, tid:tid, pipe:pipe, item:item, reply:key_h);
  181.  if ( data ) value = registry_decode_sz(data:data);
  182.  registry_close(soc:soc, uid:uid, tid:tid, pipe:pipe,  reply:key_h);
  183.  if ( value ) set_kb_item(name:"SMB/Registry/HKLM/SOFTWARE/Microsoft/DataAccess/Version", value:value);
  184. }
  185.  
  186. key = "SOFTWARE\Microsoft\Exchange\Setup";
  187. item = "ServicePackBuild";
  188.  
  189. key_h = registry_get_key(soc:soc, uid:uid, tid:tid, pipe:pipe, key:key, reply:handle);
  190. if ( key_h )
  191. {
  192.  data = registry_get_item_dword(soc:soc, uid:uid, tid:tid, pipe:pipe, item:item, reply:key_h);
  193.  if ( data ) value = registry_decode_dword(data:data);
  194.  registry_close(soc:soc, uid:uid, tid:tid, pipe:pipe,  reply:key_h);
  195.  if ( value ) set_kb_item(name:"SMB/Registry/HKLM/SOFTWARE/Microsoft/Exchange/Setup/ServicePackBuild", value:value);
  196. }
  197.  
  198. key = "SYSTEM\CurrentControlSet\Services\DHCPServer";
  199.  
  200. key_h = registry_get_key(soc:soc, uid:uid, tid:tid, pipe:pipe, key:key, reply:handle);
  201. if ( key_h )
  202. {
  203.  set_kb_item(name:"SMB/Registry/HKLM/SYSTEM/CurrentControlSet/Services/DHCPServer", value:1);
  204.  registry_close(soc:soc, uid:uid, tid:tid, pipe:pipe,  reply:key_h);
  205. }
  206.  
  207.  
  208. key = "SYSTEM\CurrentControlSet\Services\WINS";
  209. item = "DisplayName";
  210. key_h = registry_get_key(soc:soc, uid:uid, tid:tid, pipe:pipe, key:key, reply:handle);
  211. if ( key_h )
  212. {
  213.  data = registry_get_item_dword(soc:soc, uid:uid, tid:tid, pipe:pipe, item:item, reply:key_h);
  214.  if ( data ) value = registry_decode_dword(data:data);
  215.  registry_close(soc:soc, uid:uid, tid:tid, pipe:pipe,  reply:key_h);
  216.  if ( value ) set_kb_item(name:"SMB/Registry/HKLM/SYSTEM/CurrentControlSet/Services/WINS/DisplayName", value:value);
  217. }
  218.